Many different types and styles of semiconductor memory devices exist to store data for electronic devices, such as computers, portable media players, and digital cameras. For example, dynamic random access memory (DRAM) and static random access memory (SRAM) are two types of volatile memory. Programmable read only memory (PROM), electrically erasable programmable read only memory (EEPROM), and flash memory are three common types of non-volatile memory.
Non-volatile memory, such as flash memory, is generally constructed of many memory cells where single bits of data are stored in and read from individual memory cells in a memory array. The cells are generally programmed by hot electron injection and erased by Fowler-Nordheim tunneling or other mechanisms. The erase, program, and read operations are commonly performed by application of appropriate voltages to certain terminals of the memory cells. In erase or write operations, the voltages are applied to the memory cells and cause charges to be removed or stored in the memory cells. In read operations, generally, threshold voltages (Vth) are applied to the cells which cause currents to flow in the cells, wherein the amounts of such currents are indicative of the values of the data stored in the cells. The memory devices usually include appropriate circuitry to sense the resulting cell currents in order to determine the data stored therein.
A significant problem arises from the fact that certain cells (or bits depending on the embodiment) in the memory array tend to be “fast” and others “slow” during a program operation. In other words, these fast and slow cells tend to over-accumulate or under-accumulate charges on their floating gates when programmed, which may alternatively be referred to as threshold voltage sensitivity. Generally, the characteristics of being fast and slow are related to cell physical parameters from manufacturing, such as oxide thickness variations, different channel widths, different floating gate dimensions, etc. Because of these under-accumulation or over-accumulation of charges, these cells tend to have threshold voltages that deviate significantly from target threshold voltages.
Many devices program the memory cells using a sequence of programming pulses. The method of programming involves increasing the voltage of successive pulses up to a maximum voltage, wherein the voltage of each successive pulse increases by a fixed “step” amount. Designers of these prior art devices generally want to program the devices as fast as possible, yet program the threshold voltages relatively close to target threshold values. Unfortunately, fast and slow bits cause the programming times to be relatively long or the distributions of the threshold voltages to be relatively large.